Publicador de Conteúdos e Mídias

Um erro ocorreu enquanto processava o modelo.
Java method "com.liferay.journal.model.impl.JournalArticleImpl.getContent()" threw an exception when invoked on com.liferay.journal.model.impl.JournalArticleImpl object "{\"mvccVersion\": 1, \"ctCollectionId\": 0, \"uuid\": \"3c3f0ffc-ce4c-5636-3909-ad86dda0ce48\", \"id\": 117064709, \"resourcePrimKey\": 201374, \"groupId\": 200052, \"companyId\": 20102, \"userId\": 42839451, \"userName\": \"Fabio Braga de Oliveira\", \"createDate\": \"Wed Jul 22 16:34:36 GMT 2020\", \"modifiedDate\": \"Mon Jan 05 12:42:37 GMT 2026\", \"externalReferenceCode\": \"1495387\", \"folderId\": 0, \"classNameId\": 0, \"classPK\": 0, \"treePath\": \"/\", \"articleId\": \"1495387\", \"version\": 8.2, \"urlTitle\": \"senac-araraquara\", \"DDMStructureKey\": \"134298\", \"DDMTemplateKey\": \"\", \"defaultLanguageId\": \"pt_BR\", \"layoutUuid\": \"\", \"displayDate\": \"Wed Jul 22 16:31:00 GMT 2020\", \"expirationDate\": null, \"reviewDate\": null, \"indexable\": true, \"smallImage\": false, \"smallImageId\": 0, \"smallImageURL\": \"\", \"lastPublishDate\": null, \"status\": 0, \"statusByUserId\": 101743407, \"statusByUserName\": \"Wyrlene Lilian Rebelo Henriques Povia\", \"statusDate\": \"Mon Jan 05 12:42:37 GMT 2026\"}"; see cause exception in the Java stack trace.

----
FTL stack trace ("~" means nesting-related):
	- Failed at: #assign document = saxReaderUtil.read...  [in template "20102#20129#40316" at line 196, column 21]
----
1<#--  
2        Name: Unidade - Header 
3        Type: Asset Publisher Widget Template 
4        Path: ROOT/assets/unidade-header/widget-templates/unidade-header.ftl 
5    --> 
6<style> 
7 
8.ssp-header-unidade__content-info-body{ 
9	padding-top:30px; 
10
11 
12.ssp-header-unidade__atendimento-container > p > a { 
13    color:white!important; 
14
15 
16.ssp-header-unidade__atendimento-container > p > a:hover { 
17    color:white!important; 
18    font-weight: normal!important; 
19
20 
21.creditoFotoMob{ 
22 
23    margin: 0 auto; 
24    background: #FFF7D6; 
25    font-family: 'Montserrat'; 
26    font-size: 14px; 
27    line-height: 1.6em; 
28    border-radius: 3px; 
29    max-width: 240px; 
30    height: auto; 
31    color: #4F596F; 
32    padding: 5px; 
33    position: relative;     
34    float: right;     
35    top: 70%; 
36    max-height: 40px; 
37    font-weight: 500; 
38    right: 15%; 
39    flex-wrap: unset; 
40
41 
42.creditoFotoMob:after{ /*Triangulo*/ 
43    content: ""; 
44    width: 0; 
45    height: 0; 
46    position: absolute; 
47    border-left: 10px solid transparent; 
48    border-right: 10px solid transparent; 
49    /*Faz seta "apontar para baixo. Definir o valor como 'top' fará ela "apontar para cima" */ 
50    /*Aqui entra a cor da "aba" do balão */ 
51    border-bottom: 10px solid #FFF7D6; 
52    top: -9px; /*localização. Experimente alterar para 'bottom'*/ 
53    left: 20%; 
54
55.tooltip-inner { 
56    max-width: 230px; 
57    padding: 0.75rem 0.75rem; 
58    color: #4F596F; 
59    text-align: center; 
60    background-color: #FFF7D6; 
61    border-radius: 0.3125rem; 
62
63.bs-tooltip-top .arrow::before, .bs-tooltip-auto[x-placement^="top"] .arrow::before { 
64    top: 0; 
65    border-width: 0.4rem 0.4rem 0; 
66    border-top-color: #FFF7D6; 
67
68.ssp-header-title-bloco { 
69    font-size: 20px; 
70    font-weight: 600; 
71
72 
73.ssp:not(.liferay-instance) .ssp-header-unidade__imagem-box-imagem{ 
74    height:100%; 
75
76/*#slider { 
77    width: 80%; 
78    max-width: 500px; 
79    height: 25vw; 
80    max-height: 150px; 
81 
82    position: relative; 
83}*/ 
84 
85#slider .ssp-header-unidade__imagem-box-imagem{ 
86    opacity: 0; 
87    position: absolute; 
88    /*width: 100%; 
89    height: 100%;*/ 
90    object-fit: cover; 
91    transition: opacity 2000ms; 
92
93 
94#slider .ssp-header-unidade__imagem-box-imagem.selected {  
95    opacity: 1; 
96
97 
98#slider .ssp-header-unidade__imagem-box-imagem img{ 
99    position: absolute; 
100    width: 100%; 
101    height: 100%; 
102    object-fit: cover; 
103
104 
105@media only screen and (max-width: 1024px) { 
106 
107#slider .ssp-header-unidade__imagem-box-imagem{  
108    margin-top: -240px; 
109    height: 248px; 
110 
111
112 .ssp-header-unidade__container-info { 
113    margin-top: 240px!important; 
114
115 
116
117 
118 @media only screen and (max-width: 768px){ 
119 
120  .ssp:not(.liferay-instance) .ssp-header-unidade__imagem-box-imagem{ 
121    height:228px; 
122
123  .ssp-header-title-bloco { 
124    font-size: 14px;     
125}    
126 
127  .creditoFotoMob{ 
128    font-size: 9px!important; 
129    max-width: 161px!important; 
130    max-height: 30px!important; 
131    padding: 8.5px 9.5px!important; 
132    line-height: 0.6em!important; 
133     
134
135}  
136 
137/* Transporte próximo */ 
138 
139.ssp:not(.liferay-instance) .ssp-header-unidade__estacionamento { 
140    display:block; 
141    padding-top: 5px; 
142
143 
144.ssp:not(.liferay-instance) .ssp-header-unidade__endereco-container { 
145    display: flex; 
146    align-items: center; 
147    justify-content: space-between; 
148    flex-flow: column; 
149    align-items: flex-start; 
150    gap: 15px; 
151
152 
153.ssp:not(.liferay-instance) .ssp-header-unidade__estacionamento a{ 
154    color:white; 
155
156 
157.ssp:not(.liferay-instance) .ssp-header-unidade__estacionamento a:hover{ 
158    font-weight:normal!important; 
159
160 
161.ssp:not(.liferay-instance) .ssp-header-unidade__estacionamento p{ 
162    display:inline-block; 
163    margin: 0; 
164
165 
166.ssp:not(.liferay-instance) .ssp-header-unidade__endereco { 
167    max-width: 100%; 
168
169 
170@media only screen and (max-width: 768px){ 
171 
172    .ssp:not(.liferay-instance) .ssp-header-unidade__container-info .container { 
173        padding: 0; 
174
175 
176    .ssp:not(.liferay-instance) .ssp-header-unidade__estacionamento p{ 
177        display:inline; 
178        font-size: 13px; 
179
180
181 
182 
183</style> 
184 
185<#assign prefix = "ssp" /> 
186<#assign defaultImage = "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTuyJZ_Ky8o9kn0wiBy4mp5-3sb7xei_WudTL_3Jo6yvWmzQHuK&s" /> 
187 
188<section style="position:relative;"> 
189<#--  Dinâmico  --> 
190    <div class="ssp-header-unidade__imagem-box">     
191            <#--  Inicia o Looping  --> 
192 
193                <#list entries![] as entry> 
194 
195                    <#assign renderer = entry.getAssetRenderer() /> 
196                    <#assign document = saxReaderUtil.read(renderer.getArticle().getContent()) /> 
197                    <#assign rootElement = document.getRootElement() /> 
198                    <#assign journalArticle = renderer.getArticle() /> 
199 
200                        <#-- Get fields --> 
201 
202                    <#--  Nome da unidade  --> 
203                    <#assign xPathSelector_nome = saxReaderUtil.createXPath("dynamic-element[@field-reference='nomeUsualUnidade']")> 
204                    <#assign nomeUnidade = xPathSelector_nome.selectSingleNode(rootElement).getStringValue()> 
205 
206                    <#assign xPathSelector_codigoUnidade = saxReaderUtil.createXPath("dynamic-element[@field-reference='codigoUnidade']")> 
207                    <#assign codigoUnidade = xPathSelector_codigoUnidade.selectSingleNode(rootElement).getStringValue()?trim> 
208                     
209                        <#if nomeUnidade?? > 
210                            <#assign nome = nomeUnidade > 
211                            <#else> 
212                            <#assign nome = "" > 
213                        </#if> 
214 
215                <#--  Endereço 1  --> 
216 
217                        <#--  Rua  --> 
218                        <#assign xPathSelector_enderecoUnidade = saxReaderUtil.createXPath("dynamic-element[@field-reference='enderecoUnidade']")> 
219                        <#assign enderecoUnidade = xPathSelector_enderecoUnidade.selectSingleNode(rootElement).getStringValue()?trim> 
220 
221                            <#if enderecoUnidade?? > 
222                                <#assign endereco = enderecoUnidade > 
223                                <#else> 
224                                <#assign endereco = "" > 
225                            </#if> 
226 
227                        <#--  número  --> 
228                        <#assign xPathSelector_numEnderecoUnidade = saxReaderUtil.createXPath("dynamic-element[@field-reference='numEnderecoUnidade']")> 
229                        <#assign numeroUnidade = xPathSelector_numEnderecoUnidade.selectSingleNode(rootElement).getStringValue()?trim> 
230 
231                            <#if numeroUnidade?? > 
232                                <#assign numero = numeroUnidade > 
233                                <#else> 
234                                <#assign numero = "" > 
235                            </#if> 
236 
237                        <#--  Bairro  --> 
238                        <#assign xPathSelector_bairroUnidade = saxReaderUtil.createXPath("dynamic-element[@field-reference='bairroUnidade']")> 
239                        <#assign bairroUnidade = xPathSelector_bairroUnidade.selectSingleNode(rootElement).getStringValue()?trim> 
240 
241                            <#if bairroUnidade?? > 
242                                <#assign bairro = bairroUnidade > 
243                                <#else> 
244                                <#assign bairro = "" > 
245                            </#if> 
246                         
247                        <#--  Cidade  --> 
248                        <#assign xPathSelector_cidadeUnidade = saxReaderUtil.createXPath("dynamic-element[@field-reference='cidadeUnidade']")> 
249                        <#assign cidadeUnidade = xPathSelector_cidadeUnidade.selectSingleNode(rootElement).getStringValue()?trim> 
250 
251                            <#if cidadeUnidade?? > 
252                                <#assign cidade = cidadeUnidade > 
253                                <#else> 
254                                <#assign cidade = "" > 
255                            </#if> 
256 
257                        <#--  Cep  --> 
258                        <#assign xPathSelector_cepUnidade = saxReaderUtil.createXPath("dynamic-element[@field-reference='cepUnidade']")> 
259                        <#assign cepUnidade = xPathSelector_cepUnidade.selectSingleNode(rootElement).getStringValue()?trim> 
260 
261                            <#if cepUnidade?? > 
262                                <#assign cep = cepUnidade > 
263                                <#else> 
264                                <#assign cep = "" > 
265                            </#if>  
266 
267            <#-- Fim endereço 1 -->   
268 
269            <#--  Endereço 2  --> 
270 
271                        <#--  Rua  --> 
272                        <#assign xPathSelector_enderecoUnidade2 = saxReaderUtil.createXPath("dynamic-element[@field-reference='enderecoUnidade2']")> 
273                        <#assign enderecoUnidade2 = xPathSelector_enderecoUnidade2.selectSingleNode(rootElement).getStringValue()?trim> 
274 
275                            <#if enderecoUnidade2?? > 
276                                <#assign endereco2 = enderecoUnidade2 > 
277                                <#else> 
278                                <#assign endereco2 = "" > 
279                            </#if> 
280 
281                        <#--  número  --> 
282                        <#assign xPathSelector_numeroUnidade2 = saxReaderUtil.createXPath("dynamic-element[@field-reference='numeroUnidade2']")> 
283                        <#assign numeroUnidade2 = xPathSelector_numeroUnidade2.selectSingleNode(rootElement).getStringValue()?trim> 
284 
285                            <#if numeroUnidade2?? > 
286                                <#assign numero2 = numeroUnidade2 > 
287                                <#else> 
288                                <#assign numero2 = "" > 
289                            </#if> 
290 
291                        <#--  Bairro  --> 
292                        <#assign xPathSelector_bairroUnidade2 = saxReaderUtil.createXPath("dynamic-element[@field-reference='bairroUnidade2']")> 
293                        <#assign bairroUnidade2 = xPathSelector_bairroUnidade2.selectSingleNode(rootElement).getStringValue()?trim> 
294 
295                            <#if bairroUnidade2?? > 
296                                <#assign bairro2 = bairroUnidade2 > 
297                                <#else> 
298                                <#assign bairro2 = "" > 
299                            </#if> 
300                         
301                        <#--  Cidade  --> 
302                        <#assign xPathSelector_cidadeUnidade2 = saxReaderUtil.createXPath("dynamic-element[@field-reference='cidadeUnidade2']")> 
303                        <#assign cidadeUnidade2 = xPathSelector_cidadeUnidade2.selectSingleNode(rootElement).getStringValue()?trim> 
304 
305                            <#if cidadeUnidade2?? > 
306                                <#assign cidade2 = cidadeUnidade2 > 
307                                <#else> 
308                                <#assign cidade2 = "" > 
309                            </#if> 
310 
311                        <#--  Cep  --> 
312                        <#assign xPathSelector_cepUnidade2 = saxReaderUtil.createXPath("dynamic-element[@field-reference='cepUnidade2']")> 
313                        <#assign cepUnidade2 = xPathSelector_cepUnidade2.selectSingleNode(rootElement).getStringValue()?trim> 
314 
315                            <#if cepUnidade2?? > 
316                                <#assign cep2 = cepUnidade2 > 
317                                <#else> 
318                                <#assign cep2 = "" > 
319                            </#if>  
320 
321            <#-- Fim endereço 2 --> 
322 
323 
324 
325                        <#--  Horário  --> 
326                        <#assign xPathSelector_horarioUnidade = saxReaderUtil.createXPath("dynamic-element[@field-reference='horarioUnidade']")> 
327                        <#assign horarioUnidade = xPathSelector_horarioUnidade.selectSingleNode(rootElement).getStringValue()?trim> 
328 
329                            <#if horarioUnidade?? > 
330                                <#assign horario = horarioUnidade > 
331                                <#else> 
332                                <#assign horario = "" > 
333                            </#if> 
334 
335                        <#--  DDD  --> 
336                        <#assign xPathSelector_dddUnidade = saxReaderUtil.createXPath("dynamic-element[@field-reference='dddTelefoneUnidade']")> 
337                        <#assign dddUnidade = xPathSelector_dddUnidade.selectSingleNode(rootElement).getStringValue()?trim> 
338 
339                            <#if dddUnidade?? > 
340                                <#assign ddd = dddUnidade > 
341                                <#else> 
342                                <#assign ddd = "" > 
343                            </#if> 
344 
345                        <#--  telefone  --> 
346                        <#assign xPathSelector_telefoneUnidade = saxReaderUtil.createXPath("dynamic-element[@field-reference='telefoneUnidade']")> 
347                        <#assign telefoneUnidade = xPathSelector_telefoneUnidade.selectSingleNode(rootElement).getStringValue()?trim> 
348 
349                            <#if telefoneUnidade?? > 
350                                <#assign telefone = telefoneUnidade > 
351                                <#else> 
352                                <#assign telefone = "" > 
353                            </#if>                         
354 
355                        <#--  UF  --> 
356                        <#assign xPathSelector_ufUnidade = saxReaderUtil.createXPath("dynamic-element[@field-reference='ufUnidade']")> 
357                        <#assign ufUnidade = xPathSelector_ufUnidade.selectSingleNode(rootElement).getStringValue()?trim> 
358 
359                            <#if ufUnidade?? > 
360                                <#assign UF = ufUnidade > 
361                                <#else> 
362                                <#assign UF = "" > 
363                            </#if> 
364 
365                        <#-- Estacionamento --> 
366                        <#assign xPathSelector_estacionamento = saxReaderUtil.createXPath("dynamic-element[@field-reference='estacionamentoUnidade']")> 
367                        <#assign estacionamentoUnidade = xPathSelector_estacionamento.selectSingleNode(rootElement).getStringValue()>  
368 
369                            <#if estacionamentoUnidade?? > 
370                                <#assign estacionamento = estacionamentoUnidade > 
371                                <#else> 
372                                <#assign estacionamento = "" > 
373                            </#if> 
374 
375                         <#-- Estacionamento Unidade 2 --> 
376                        <#assign xPathSelector_estacionamento2 = saxReaderUtil.createXPath("dynamic-element[@field-reference='estacionamentoUnidade2']")> 
377                        <#assign estacionamentoUnidade2 = xPathSelector_estacionamento2.selectSingleNode(rootElement).getStringValue()>  
378 
379                            <#if estacionamentoUnidade2?? > 
380                                <#assign estacionamento2 = estacionamentoUnidade2 > 
381                                <#else> 
382                                <#assign estacionamento2 = "" > 
383                            </#if>          
384 
385                        <#--  Facebook  --> 
386                        <#assign xPathSelector_facebookUnidade = saxReaderUtil.createXPath("dynamic-element[@field-reference='facebookUnidade']")> 
387                        <#assign facebookUnidade = xPathSelector_facebookUnidade.selectSingleNode(rootElement).getStringValue()> 
388 
389                            <#if facebookUnidade?? > 
390                                <#assign facebook = facebookUnidade > 
391                                <#else> 
392                                <#assign facebook = "" > 
393                            </#if> 
394 
395                        <#--  Instagram  --> 
396                        <#assign xPathSelector_instagramUnidade = saxReaderUtil.createXPath("dynamic-element[@field-reference='instagramUnidade']")> 
397                        <#assign instagramUnidade = xPathSelector_instagramUnidade.selectSingleNode(rootElement).getStringValue()> 
398 
399                            <#if instagramUnidade?? > 
400                                <#assign instagram = instagramUnidade > 
401                                <#else> 
402                                <#assign instagram = "" > 
403                            </#if> 
404 
405                        <#--  Maps  --> 
406                        <#assign xPathSelector_googlemapsUnidade = saxReaderUtil.createXPath("dynamic-element[@field-reference='googlemapsUnidade']")> 
407                        <#assign googlemapsUnidade = xPathSelector_googlemapsUnidade.selectSingleNode(rootElement).getStringValue()?trim> 
408 
409                            <#if googlemapsUnidade?? > 
410                                <#assign googlemaps = googlemapsUnidade > 
411                                <#else> 
412                                <#assign googlemaps = "" > 
413                            </#if> 
414 
415                        <#assign  hasMaps = (googlemaps?trim?length > 0) > 
416 
417                         
418 
419                        <#--  Waze  --> 
420                        <#assign xPathSelector_wazeUnidade = saxReaderUtil.createXPath("dynamic-element[@field-reference='wazeUnidade']")> 
421                        <#assign wazeUnidade = xPathSelector_wazeUnidade.selectSingleNode(rootElement).getStringValue()> 
422 
423                            <#if wazeUnidade?? > 
424                                <#assign waze = wazeUnidade > 
425                                <#else> 
426                                <#assign waze = "" > 
427                            </#if>    
428 
429                                       
430 
431                                 
432                    <#--  Imagem  --> 
433 
434                    <#assign xPathSelector = saxReaderUtil.createXPath("dynamic-element[@field-reference='imagemUnidade']")> 
435 
436                        <#assign imagemStr = xPathSelector.selectSingleNode(rootElement).getStringValue()> 
437												<#assign imagemJson = jsonFactoryUtil.createJSONObject(imagemStr)> 
438												<#assign imagemId = getterUtil.getInteger(imagemJson.get('fileEntryId'))> 
439                         
440                        <#if imagemId != 0> 
441                            <#assign 
442                                dl = serviceLocator.findService("com.liferay.document.library.kernel.service.DLAppService") 
443                                dlURLHelper = serviceLocator.findService("com.liferay.document.library.util.DLURLHelper") 
444                                fileEntry = dl.getFileEntry(imagemId) 
445                                imagemUrl = dlURLHelper.getImagePreviewURL(fileEntry, themeDisplay)  
446                                imagemAlt = imagemJson.get('alt') 
447                            /> 
448                            <#else> 
449                                <#assign imagemUrl = ""> 
450                        </#if> 
451 
452                    <#--  Imagem 2  -->     
453                    <#assign xPathSelector2 = saxReaderUtil.createXPath("dynamic-element[@field-reference='imagemUnidade2']")> 
454											 
455                    <#assign imagemStr2 = xPathSelector2.selectSingleNode(rootElement).getStringValue()> 
456 
457                    <#if imagemStr2?contains("classPK")>		 
458                        <#assign imagemJson2 = jsonFactoryUtil.createJSONObject(imagemStr2)> 
459                        <#assign imagemId2 = getterUtil.getInteger(imagemJson2.get('fileEntryId'))> 
460										 
461                        <#if imagemId2 != 0> 
462                            <#assign 
463                                dl = serviceLocator.findService("com.liferay.document.library.kernel.service.DLAppService") 
464                                dlURLHelper = serviceLocator.findService("com.liferay.document.library.util.DLURLHelper") 
465                                fileEntry = dl.getFileEntry(imagemId2) 
466                                imagemUrl2 = dlURLHelper.getImagePreviewURL(fileEntry, themeDisplay)  
467                                imagemAlt2 = imagemJson2.get('alt') 
468                            /> 
469                            <#else> 
470                                <#assign imagemUrl2 = ""> 
471                        </#if> 
472                         
473                           
474				</#if> 
475 
476             <#--  Crédito Imagem  -->                     
477                    <#assign xPathSelector_creditoImagem = saxReaderUtil.createXPath("dynamic-element[@field-reference='creditoImagem']")> 
478 
479                    <#assign creditoImagem = xPathSelector_creditoImagem.selectSingleNode(rootElement).getStringValue()> 
480 
481                    <#assign  hasCreditoImagem = (creditoImagem?trim?length > 0) > 
482 
483 
484            <#--  Estação próxima  -->                     
485            <#assign xPathSelector_estacaoProxima = saxReaderUtil.createXPath("dynamic-element[@field-reference='estacaoProxima']")> 
486 
487            <#assign estacaoProxima = xPathSelector_estacaoProxima.selectSingleNode(rootElement).getStringValue()> 
488 
489            <#assign  hasEstacaoProxima = (estacaoProxima?trim?length > 0) > 
490 
491                <#--  dados de compartilhamento  --> 
492                <@liferay_util["html-top"]> 
493                    <meta name="image" property="og:image" content="${imagemUrl}"> 
494                    <meta property="og:image:width" content="1024"> 
495                </@> 
496                <#--  dados de compartilhamento  --> 
497                     <div class="ssp-header-unidade__imagem-box-box-linha"></div> 
498 
499            <div class="ssp-header-unidade__imagem-box-box-linha2"></div> 
500 
501   
502        <div id="slider">        
503 
504            <div class="ssp-header-unidade__imagem-box-imagem selected">  
505 
506                <img src="${imagemUrl}" loading="lazy" <#if imagemAlt?length != 0> alt="${imagemAlt}"</#if> >                
507 
508                <#if endereco2?length == 0> 
509                    <#if hasCreditoImagem > 
510 
511                        <div class="creditoFotoMob d-none"> 
512                            Foto: ${creditoImagem} 
513                        </div> 
514 
515                    </#if> 
516                </#if> 
517 
518            </div> 
519        
520            <#if endereco2?length != 0> 
521 
522                <div class="ssp-header-unidade__imagem-box-imagem"> 
523                     <img src="${imagemUrl2}" loading="lazy" <#if imagemAlt?length != 0> alt="${imagemAlt}"</#if> >   
524                </div>    
525 
526            </#if>     
527                 
528              
529                 
530        </div> 
531                
532 
533 
534            <div class="ssp-header-unidade__container-info pb-0"> 
535 
536                <div class="container"> 
537 
538                    <div class="ssp-header-unidade__content-info" style="height: auto;"> 
539 
540                        <div class="ssp-header-unidade__content-info-container"> 
541 
542                            <div> 
543 
544                                <div> 
545                                    <small class="ssp-header-unidade__subtitle">Senac</small> 
546                                </div> 
547 
548                                <div class="ssp-header-unidade__title-container"> 
549 
550                                    <div> 
551                                         <h1 class="ssp-header-unidade__title"> 
552                                          
553                                            ${nome} 
554             
555                                         </h1> 
556                                    </div> 
557                                     
558                                    <#-- Apenas para referencia no JS --> 
559                                    <span id="codUnidadeReferencia" class="d-none">${codigoUnidade}</span> 
560                                                                         
561                                </div> 
562     
563                            </div> 
564 
565                            <div class="ssp-header-unidade__endereco-container"> 
566 
567                                <div class="d-flex flex-wrap"> 
568 
569                                        <div> 
570 
571                                            <#if endereco2?length != 0> 
572                                                <span class="ssp-header-title-bloco">Bloco I</span><br> 
573                                            </#if> 
574                                            <address class="ssp-header-unidade__endereco"> 
575                                                ${endereco}, ${numero}<br>  
576                                                ${bairro}, ${cidade} - ${UF}, ${cep} 
577                                            </address> 
578 
579                                            <span class="ssp-header-unidade__estacionamento"> 
580 
581                                            <i class="fas fa-car"></i> 
582 
583                                                <#if estacionamento?contains("true")> 
584                                                    <strong>Possui estacionamento?</strong> Sim 
585                                                    <#else> 
586                                                    <strong>Possui estacionamento?</strong> Não 
587                                                </#if> 
588 
589                                            </span> 
590                                        </div> 
591 
592                                        <#if endereco2?length != 0> 
593 
594                                            <div class="pt-5"> 
595                                                <span class="ssp-header-title-bloco">Bloco II</span><br> 
596                                                <address class="ssp-header-unidade__endereco"> 
597                                                    ${endereco2}, ${numero2}<br>  
598                                                    ${bairro2}, ${cidade2}, ${cep2} 
599                                                </address> 
600                                                <span class="ssp-header-unidade__estacionamento"> 
601                                                    <i class="fas fa-car"></i> 
602 
603                                                        <#if estacionamento2?contains("true")> 
604                                                            <strong>Possui estacionamento?</strong> Sim 
605                                                            <#else> 
606                                                            <strong>Possui estacionamento?</strong> Não 
607                                                        </#if> 
608 
609                                                </span> 
610                                            </div> 
611 
612                                        </#if> 
613                                         
614                                        <#if hasEstacaoProxima> 
615                                            
616                                            <span class="ssp-header-unidade__estacionamento"> 
617                                                <i class="fa-solid fa-train-subway" aria-hidden="true"></i> 
618                                                <strong>Estação mais próxima:</strong> 
619                                                ${estacaoProxima} 
620                                            </span> 
621                                     
622                                        </#if>  
623                                         
624 
625                                </div>  
626        
627                                <div class="ssp-header-unidade__content-info-maps"> 
628 
629                                    <#if hasMaps > 
630 
631                                        <a class="btn btn-nivel border-white ssp-header-unidade__btn" href="${googlemaps}" target="_blank"> 
632                                            <i class="fas fa-map-marker-alt mr-2 ssp-header-unidade__btn-icon"></i>Google Maps 
633                                        </a> 
634 
635                                        <#else> 
636                                         
637                                        <a class="btn btn-nivel border-white ssp-header-unidade__btn d-none" href="${googlemaps}" target="_blank"> 
638                                            <i class="fas fa-map-marker-alt mr-2 ssp-header-unidade__btn-icon"></i>Google Maps 
639                                        </a> 
640 
641 
642                                    </#if> 
643 
644 
645                                    <a class="btn btn-nivel border-white ml-2  d-sm-inline-block d-md-none d-lg-none d-xl-none ssp-header-unidade__btn" href="${waze}" target="_blank"> 
646                                        <i class="fab fa-waze mr-2 ssp-header-unidade__btn-icon"></i>Waze 
647                                    </a> 
648 
649                                </div>                         
650                                 
651                            </div> 
652 
653                         
654                        </div> 
655 
656                        <div class="ssp-header-unidade__content-info-body"> 
657 
658                            <div class="ssp-header-unidade__atendimento-container"> 
659                                <p><strong>Atendimento:</strong></p> 
660                                <#--  <p>(${ddd}) ${telefone}</p>  --> 
661                                <p>${horario}</p> 
662                            </div> 
663                         
664                        </div> 
665 
666                                                 
667                    </div>                     
668                                         
669                </div> 
670 
671            </div>  
672                     
673                </#list>  
674    </div> 
675     
676</section> 
677 
678<script> 
679     
680    if ( $.trim($('.ssp-header-unidade__title').html()) === 'Santo Amaro'){ 
681 
682    $('.ssp-header-unidade__subtitle').html('Centro Universitário Senac') 
683 
684    } else if ( $.trim($('.ssp-header-unidade__title').html()) === 'Campos do Jordão'){ 
685 
686        $('.ssp-header-unidade__subtitle').html('Centro Universitário Senac') 
687 
688    } else if ( $.trim($('.ssp-header-unidade__title').html()) === 'Águas de São Pedro'){ 
689 
690        $('.ssp-header-unidade__subtitle').html('Centro Universitário Senac') 
691 
692
693 
694//Animação de Crédito da imagem 
695 
696$(document).ready(function(){   
697 
698    let larguraTela = $(window).width(); 
699 
700    if(larguraTela < 1024){ 
701 
702        animateCreditImage() 
703 
704        $(window).scroll(function() { 
705            ScrollPagina() 
706        }); 
707 
708    }else{ 
709 
710        $(".ssp-header-unidade__imagem-box-imagem" ).mouseover(function() { 
711            $(".creditoFotoMob").removeClass('d-none') 
712         
713        });   
714 
715        $(".ssp-header-unidade__imagem-box-imagem" ).mouseout(function() { 
716                $(".creditoFotoMob").addClass('d-none') 
717                 
718        });  
719 
720
721 
722    //verifica posição do Top 
723 
724    function ScrollPagina(){ 
725 
726        let scrollPage = $(window).scrollTop(); 
727 
728        if(scrollPage == 0){ 
729 
730            animateCreditImage() 
731 
732
733
734 
735    function animateCreditImage(){ 
736 
737        $( ".creditoFotoMob" ).removeClass('d-none').fadeIn( 200 ).delay( 2500 ).fadeOut( 5000 ); 
738 
739
740 
741    //anima Slider fotos unidades de 
742 
743    let time = 5000, 
744        currentImageIndex = 0, 
745        images = document 
746                    .querySelectorAll("#slider .ssp-header-unidade__imagem-box-imagem") 
747        max = images.length; 
748 
749    function nextImage() { 
750 
751        images[currentImageIndex] 
752            .classList.remove("selected") 
753 
754        currentImageIndex++ 
755 
756        if(currentImageIndex >= max) 
757            currentImageIndex = 0 
758 
759        images[currentImageIndex] 
760            .classList.add("selected") 
761
762 
763    function start() { 
764 
765        let enderecos = document.querySelectorAll('address'); 
766 
767        console.log(enderecos.length); 
768 
769        if(enderecos.length >= 2){     
770 
771            setInterval(() => { 
772                // troca de image 
773                nextImage() 
774            }, time) 
775
776        
777
778 
779    window.addEventListener("load", start) 
780 
781});  
782     
783</script> 

Conheça nossos cursos

Publicador de Conteúdos e Mídias

Um erro ocorreu enquanto processava o modelo.
Java method "com.liferay.portlet.asset.model.impl.AssetEntryImpl.getCategories()" threw an exception when invoked on com.liferay.portlet.asset.model.impl.AssetEntryImpl object "{\"mvccVersion\": 26, \"ctCollectionId\": 0, \"entryId\": 201379, \"groupId\": 200052, \"companyId\": 20102, \"userId\": 98263, \"userName\": \"Thiago Augusto da Costa\", \"createDate\": \"Wed Jul 22 16:34:36 GMT 2020\", \"modifiedDate\": \"Mon Jan 05 12:42:37 GMT 2026\", \"classNameId\": 27901, \"classPK\": 201374, \"classUuid\": \"aa94dba4-1b8d-0754-0d52-a8c493dff367\", \"classTypeId\": 37552, \"listable\": true, \"visible\": true, \"startDate\": null, \"endDate\": null, \"publishDate\": \"Wed Jul 22 16:31:00 GMT 2020\", \"expirationDate\": null, \"mimeType\": \"text/html\", \"title\": \"<?xml version='1.0' encoding='UTF-8'?><root available-locales='pt_BR' default-locale='pt_BR'><Title language-id='pt_BR'>Senac Araraquara</Title></root>\", \"description\": \"\", \"summary\": \"\", \"url\": \"\", \"layoutUuid\": \"\", \"height\": 0, \"width\": 0, \"priority\": 0.0}"; see cause exception in the Java stack trace.

----
FTL stack trace ("~" means nesting-related):
	- Failed at: #list entry.getCategories()![] as cat...  [in template "20102#20129#40325" at line 53, column 13]
----
1<#-- 
2    Name: Unidades Modalidades 
3    Type: Category Navigation Widget Template 
4    Path: ROOT/assets/unidade-niveis/widget-templates/unidade-niveis-com-EAD_refresh.ftl 
5--> 
6<#assign prefix = "ssp" /> 
7 
8<#assign  
9	vocabularyLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetVocabularyLocalService") 
10 	normalizer = serviceLocator.findService("com.liferay.portal.kernel.util.FriendlyURLNormalizer")  
11 	categoryId = 0  
12 	vocabularies = vocabularyLocalService.getAssetVocabularies(-1,-1) 
13 	unidadeFriendlyUrl = getUnidadeFriendlyUrl()  
14 	 /> 
15 
16 <#function getUnidadeFriendlyUrl > 
17 	 <#assign friendly = themeDisplay.getURLCurrent()?split("/")[1]?split("?")?first /> 
18 	 <#if friendly?contains("web") > 
19    	 <#assign friendly = themeDisplay.getURLCurrent()?split("/")[2]?split("?")?first> 
20    </#if> 
21     
22    <#return friendly /> 
23     
24 </#function> 
25 
26<#list entries![] as entry> 
27 
28    <#assign renderer = entry.getAssetRenderer() /> 
29    <#assign document = saxReaderUtil.read(renderer.getArticle().getContent()) /> 
30    <#assign rootElement = document.getRootElement() /> 
31    <#assign journalArticle = renderer.getArticle() /> 
32     
33    <#list vocabularies as vocabulary > 
34    	<#if vocabulary.getName() == 'Unidades'> 
35    		 
36    		<#assign  
37    			xPathSelector_nomeUsualUnidade = saxReaderUtil.createXPath("dynamic-element[@field-reference='nomeUsualUnidade']") 
38    		  	nomeUsual = xPathSelector_nomeUsualUnidade.selectSingleNode(rootElement).getStringValue() 
39    		  	categories = vocabulary.getCategories() 
40
41    		<#list categories as category> 
42    			<#if  category.getName()?trim == nomeUsual?trim> 
43    				 
44    				<#assign categoryId = category.getCategoryId() > 
45    			</#if> 
46    		</#list> 
47    	</#if> 
48    </#list> 
49 
50        <nav class="${prefix}-btns-horizontal-area"> 
51			<input type="hidden" id="friendlyUnidade" value="${unidadeFriendlyUrl}" > 
52			 
53            <#list entry.getCategories()![] as category> 
54 
55                <#assign vocabularyName = vocabularyLocalService.getVocabulary(category.getVocabularyId()).getTitle("pt-br")?trim /> 
56				<#assign normalizedCategoryName = normalizer.normalize(category.getName()) /> 
57				 
58				<#if normalizer.normalize(vocabularyName) == "modalidade"> 
59                    <#if normalizedCategoryName == "espec.-tecnica-de-nivel-medio"> 
60                    	<a href="/${unidadeFriendlyUrl}/especializacao-tecnica" data-categoryId="${category.getCategoryId()}" class="btn btn-nivel btn-nivel-especializacao-tecnica" style="order: 1">Especialização Técnica</a> 
61                   	</#if> 
62                </#if> 
63				 
64               <#if normalizer.normalize(vocabularyName) == "tipo-de-curso">  
65                    <#if normalizedCategoryName == "livre"> 
66                        <a href="/${unidadeFriendlyUrl}/cursos-livres" data-categoryId="${category.getCategoryId()}" class="btn btn-nivel btn-nivel-${normalizedCategoryName}"> 
67                            ${category.getName()} 
68                        </a> 
69                     
70                    <#elseif normalizedCategoryName == "tecnico"> 
71                        <a href="/${unidadeFriendlyUrl}/cursos-tecnicos" data-categoryId="${category.getCategoryId()}" class="btn btn-nivel btn-nivel-${normalizedCategoryName}"> 
72                            ${category.getName()} 
73                        </a> 
74 
75                    <#elseif normalizedCategoryName == "extensao"> 
76                        <a href="/${unidadeFriendlyUrl}/extensao-universitaria" data-categoryId="${category.getCategoryId()}" class="btn btn-nivel btn-nivel-${normalizedCategoryName}"> 
77                            ${category.getName()} 
78                        </a> 
79                     
80                    <#elseif normalizedCategoryName == "extensao-ead"> 
81                        <a href="https://www.ead.senac.br/extensao-universitaria" target="_blank" data-categoryId="${category.getCategoryId()}" class="btn btn-nivel btn-nivel-${normalizedCategoryName}"> 
82                            ${category.getName()} 
83                        </a> 
84 
85                    <#elseif normalizedCategoryName == "graduacao-ead"> 
86                        <a href="https://www.ead.senac.br/graduacao" target="_blank" data-categoryId="${category.getCategoryId()}" class="btn btn-nivel btn-nivel-${normalizedCategoryName}"> 
87                            ${category.getName()} 
88                        </a> 
89 
90                    <#elseif normalizedCategoryName == "pos-graduacao-ead"> 
91                        <a href="https://www.ead.senac.br/pos-graduacao" target="_blank" data-categoryId="${category.getCategoryId()}" class="btn btn-nivel btn-nivel-${normalizedCategoryName}"> 
92                            ${category.getName()} 
93                        </a> 
94                    <#elseif normalizedCategoryName == "jovem-aprendiz"> 
95                        <a href="/jovem-aprendiz" data-categoryId="${category.getCategoryId()}" class="btn btn-nivel btn-nivel-${normalizedCategoryName}"> 
96                            ${category.getName()} 
97                        </a> 
98 
99                    <#else> 
100                        <a href="/${unidadeFriendlyUrl}/${normalizedCategoryName}" data-categoryId="${category.getCategoryId()}" class="btn btn-nivel btn-nivel-${normalizedCategoryName}"> 
101                            ${category.getName()} 
102                        </a> 
103                    </#if> 
104 
105                </#if> 
106                 
107                <#if normalizer.normalize(vocabularyName) == "tema-mercadologico-">  
108                    <#if category.getName() == "Idiomas"> 
109                        <a href="/${unidadeFriendlyUrl}/cursos-livres/${normalizedCategoryName}" data-categoryId="${category.getCategoryId()}" class="btn btn-nivel btn-nivel-${normalizedCategoryName}">${category.getName()}</a> 
110                    </#if> 
111                </#if> 
112 
113            </#list> 
114           
115        </nav> 
116 
117    <#break> 
118 
119	 
120</#list> 

Cursos com bolsa de estudo

Senac Online - ao vivo

Cursos em destaque

Publicador de Conteúdos e Mídias

Um erro ocorreu enquanto processava o modelo.
Java method "com.liferay.journal.model.impl.JournalArticleImpl.getContent()" threw an exception when invoked on com.liferay.journal.model.impl.JournalArticleImpl object "{\"mvccVersion\": 2, \"ctCollectionId\": 0, \"uuid\": \"b0a7bb0a-2201-886f-55bf-f8577b4d2d26\", \"id\": 118336237, \"resourcePrimKey\": 38787559, \"groupId\": 20125, \"companyId\": 20102, \"userId\": 38751847, \"userName\": \"QGPS 2022\", \"createDate\": \"Wed Oct 13 20:17:40 GMT 2021\", \"modifiedDate\": \"Tue Jan 13 17:14:05 GMT 2026\", \"externalReferenceCode\": \"38787557\", \"folderId\": 42112, \"classNameId\": 0, \"classPK\": 0, \"treePath\": \"/42112/\", \"articleId\": \"38787557\", \"version\": 7.1, \"urlTitle\": \"curso-tecnico-em-seguranca-do-trabalho\", \"DDMStructureKey\": \"41004\", \"DDMTemplateKey\": \"2186668\", \"defaultLanguageId\": \"pt_BR\", \"layoutUuid\": \"\", \"displayDate\": null, \"expirationDate\": null, \"reviewDate\": null, \"indexable\": true, \"smallImage\": false, \"smallImageId\": 0, \"smallImageURL\": \"\", \"lastPublishDate\": null, \"status\": 0, \"statusByUserId\": 44841, \"statusByUserName\": \"API Integração\", \"statusDate\": \"Tue Jan 13 17:14:05 GMT 2026\"}"; see cause exception in the Java stack trace.

----
FTL stack trace ("~" means nesting-related):
	- Failed at: #assign document = saxReaderUtil.read...  [in template "20102#20129#40280" at line 15, column 5]
----
1<#-- 
2    Name: Cursos Sugeridos 
3    Type: Asset Publisher Widget Template 
4    Path: ROOT/assets/home-cursos-sugeridos/widget-templates/home-cursos-sugeridos.ftl 
5--> 
6 
7<#assign prefix = "ssp" /> 
8<#assign defaultImage = "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTuyJZ_Ky8o9kn0wiBy4mp5-3sb7xei_WudTL_3Jo6yvWmzQHuK&s" /> 
9 
10<#--  Detect the one valid dataEfetiva --> 
11<#assign today_dateInt = dateUtil.getCurrentDate("yyyyMMdd", locale)?number /> 
12<#list entries![] as entry> 
13 
14    <#assign renderer = entry.getAssetRenderer() /> 
15    <#assign document = saxReaderUtil.read(renderer.getArticle().getContent()) /> 
16    <#assign dataEfetivaRepeatableNode = document.getRootElement().selectNodes("//dynamic-element[@field-reference='dataEfetiva']") /> 
17 
18    <#assign greatestDataEfetiva_dateInt = 0 /> 
19    <#assign greatestDataEfetiva_dateInt_i = -1 /> 
20    <#assign i = -1 /> 
21    <#list dataEfetivaRepeatableNode as item> 
22        <#assign i++ /> 
23        <#assign currentDataEfetiva_DateObj = dateUtil.parseDate("yyyy-MM-dd", item.elementText("dynamic-content")?string, locale) /> <#-- make date obj from raw structure data --> 
24        <#assign currentDataEfetiva_dateInt = dateUtil.getDate(currentDataEfetiva_DateObj, "yyyyMMdd", locale)?number /> 
25        <#if currentDataEfetiva_dateInt lte today_dateInt && currentDataEfetiva_dateInt gt greatestDataEfetiva_dateInt> 
26            <#assign greatestDataEfetiva_dateInt = currentDataEfetiva_dateInt /> 
27            <#assign greatestDataEfetiva_dateInt_i = i /> 
28        </#if> 
29    </#list> 
30</#list> 
31 
32 
33<#--  Iterate the list with  --> 
34<#assign vocabularyLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetVocabularyLocalService") /> 
35<#assign normalizer = serviceLocator.findService("com.liferay.portal.kernel.util.FriendlyURLNormalizer") /> 
36 
37 
38 
39<div class="slick-area-estatico slick-area-estatico--md-bleed slider-container"> 
40 
41    <#list entries?reverse as entry> 
42 
43        <#if greatestDataEfetiva_dateInt_i??> 
44 
45            <div class="slick-area__item"> 
46 
47                <#assign renderer = entry.getAssetRenderer() /> 
48                <#assign document = saxReaderUtil.read(renderer.getArticle().getContent()) /> 
49                <#assign dataEfetivaRepeatableNode = document.getRootElement().selectNodes("//dynamic-element[@field-reference='dataEfetivaFT']") /> 
50                <#assign journalArticle = renderer.getArticle() /> 
51                <#assign articleIdCurso = journalArticle.getArticleId() /> 
52 
53				<#assign codigoFT = document.getRootElement().selectSingleNode("//dynamic-element[@field-reference='codigoFT']").getStringValue()?trim > 
54 
55                <#if dataEfetivaRepeatableNode?size gt 1> 
56                    <#assign item = dataEfetivaRepeatableNode[greatestDataEfetiva_dateInt_i] /> <#-- Choose only one of the repeatables if theres multiple --> 
57                <#else> 
58                    <#assign item = dataEfetivaRepeatableNode /> 
59                </#if> 
60 
61                <#if item??> 
62 
63                    <#-- Get fields --> 
64 
65                     
66 
67                     
68                    <#assign xPathSelector = saxReaderUtil.createXPath("//dynamic-element[@field-reference='imagemComercial']")> 
69 
70                    <#-- get imagem --> 
71                    <#if xPathSelector.selectSingleNode(item)?? > 
72 
73                        <#attempt> 
74   
75                            <#assign 
76                                imagemStr = xPathSelector.selectSingleNode(item).getStringValue() 
77                                imagemJson = jsonFactoryUtil.createJSONObject(imagemStr) 
78                                imagemId = getterUtil.getInteger(imagemJson.get('fileEntryId')) 
79                                dl = serviceLocator.findService("com.liferay.document.library.kernel.service.DLAppService") 
80                                dlURLHelper = serviceLocator.findService("com.liferay.document.library.util.DLURLHelper") 
81                                fileEntry = dl.getFileEntry(imagemId) 
82
83                             
84                        <#recover> 
85 
86                        </#attempt> 
87 
88                        <#if fileEntry?? > 
89                             <#assign imagemUrl = dlURLHelper.getDownloadURL(fileEntry, fileEntry.getFileVersion(), themeDisplay,null)> 
90                        </#if> 
91 
92                    <#else> 
93                        <#assign imagemUrl = ""> 
94                    </#if> 
95 
96                    <#-- fnish get imagem --> 
97 
98 
99                    <#-- Paint! --> 
100                    <div class="${prefix}-card-curso" style="height: 288px;">  
101                    <#--  <div class="${prefix}-card-curso my-2 mx-3" id="" style="width: 237px; height: 288px;">     --> 
102 
103                        <a class="${prefix}-absolute-link ck-curso" id="link_curso_${codigoFT}" data-ck="${codigoFT}" href="#"></a> 
104 
105                        <div class="${prefix}-card-curso__image"> 
106							 
107                            <#if imagemUrl??> 
108 
109                            <div class="${prefix}-image-container" style="background-image: url(${imagemUrl}) "> 
110                                <img src="${imagemUrl}" /> 
111                            </div> 
112 
113                                <#else> 
114 
115                                <div class="${prefix}-image-container" style="background-image: url() "> 
116                                    <img src="" /> 
117                                </div> 
118 
119                            </#if> 
120 
121                        </div>                         
122 
123                        <div class="${prefix}-card-curso__body"> 
124 
125                            <#list entry.getCategories()![] as category> 
126                                <#assign vocabularyName = vocabularyLocalService.getVocabulary(category.getVocabularyId()).getTitle("pt-br")?trim /> 
127 
128                                <#if normalizer.normalize(vocabularyName) == "tipo-de-curso"> 
129 
130                                    <#assign normalizedCategoryName = normalizer.normalize(category.getName()) /> 
131                                    <#assign categoryTipoCurso = category.getName() /> 
132 
133                                    <div class="ssp-card-curso__color-tag-modalidade bg-nivel-${normalizedCategoryName}"></div> 
134 
135                                </#if>  
136                                 
137                                <#if normalizer.normalize(vocabularyName) == "modalidade"> 
138                                    <#assign normalizedCategoryName = normalizer.normalize(category.getName()) /> 
139                                    <#assign categoryModalidade = category.getName() /> 
140                                </#if> 
141 
142                            </#list> 
143 
144                            <div class="${prefix}-card-curso__tags" style="margin-bottom:5px;"> 
145 
146                                <#list entry.getCategories()![] as category> 
147                                    <#assign vocabularyName = vocabularyLocalService.getVocabulary(category.getVocabularyId()).getTitle("pt-br")?trim /> 
148 
149                                    <!-- Verificar o Tipo de curso --> 
150                                    <#if normalizer.normalize(vocabularyName) == "formato"> 
151										<#assign normalizedCategoryNameModalidade = normalizer.normalize(category.getName()) /> 
152 
153                                        <!-- Caso a modalidade de ensino seja EAD, insere a Tag do Senac ao vivo --> 
154                                        <#if normalizedCategoryNameModalidade?contains("senac-online-ao-vivo") > 
155                                         
156                                            <span class="tag-modalidade-title__senac-online">Senac Online - ao vivo</span> 
157 
158                                        <#else> 
159                                            <#assign textoCardCursoFinal = "" /> 
160                                              
161                                            <#if normalizer.normalize(categoryTipoCurso) == "livre" > 
162                                            	<!--  <#assign textoCardCursoFinal = "Curso Livre" + " ¿ " + category.getName() /> --> 
163                                            	<#assign textoCardCursoFinal = "Livre" /> 
164                                             
165                                            <#elseif normalizer.normalize(categoryTipoCurso) == "tecnico"> 
166                                           	  	<!-- <#assign textoCardCursoFinal = "Técnico" + " ¿ " + category.getName() /> --> 
167                                           	  	<#assign textoCardCursoFinal = "Técnico" /> 
168                                           	  	 
169                                           </#if> 	 
170                                            
171                                           <#if normalizedCategoryName == "graduacao"> 
172                                                <div style="font-size: 12px; line-height: 16px;"> 
173                                                    <div class="ssp-card-curso__tag-modalidade-title">Graduação</div> 
174 
175                                                    <#assign pos = categoryModalidade?index_of(" - ") + 3 /> 
176                                                    <#assign xPathSelectorDuracaoCursoFT = saxReaderUtil.createXPath("//dynamic-element[@field-reference='duracaoCursoFT']")> 
177                                                    <#assign duracaoCursoFT = xPathSelectorDuracaoCursoFT.selectSingleNode(item).getStringValue()> 
178                                                    <div class="ssp-card-curso__tag-formato-title">${categoryModalidade[pos..]} - ${duracaoCursoFT}</div> 
179                                                </div> 
180                                            </#if> 
181										</#if>  
182                                    </#if> 
183                                     
184                                </#list> 
185 
186                            </div> 
187                             
188                            <#assign  
189                                webContentServiceUtil = serviceLocator.findService("br.senac.services.service.WebContentServiceUtil") 
190                                curso = webContentServiceUtil.cursoInfoByJournalArticle(themeDisplay.getSiteGroupId(), journalArticle, false, true, true, false, false) 
191                            /> 
192 
193                            <span class="${prefix}-card-curso__tag-formato-title">${curso.toDisplay.tipoFormato}</span> 
194 
195                            <h6 class="${prefix}-card-curso__title pt-md-3"> 
196                                ${entry.getTitle(locale)} 
197                            </h6> 
198 
199                            <div class="${prefix}-card-curso__info d-none"> 
200 
201                                <span class="ssp-tag bg-white border-nivel-extensao text-nivel-extensao mr-1" id="botao_inscAberta_${articleIdCurso}">Inscriçôes abertas</span>  
202                                <span class="ssp-tag bg-white border-primary text-primary" id="botao_bolsa_${articleIdCurso}">Bolsas</span> 
203 
204                                <#--  <#list entry.getCategories()![] as category> 
205 
206                                    <#assign vocabularyName = vocabularyLocalService.getVocabulary(category.getVocabularyId()).getTitle("pt-br")?trim /> 
207 
208                                    <#if normalizer.normalize(vocabularyName) == "unidades"> <#-- Break after finding the first one while there's no further logic implemented --> 
209                                        <#--  <small><i class="icon-map-marker mr-1"></i> ${category.getName()}</small> 
210                                        <#break> 
211                                    </#if> 
212 
213                                </#list>  -->  
214 
215                            </div> 
216 
217                        </div> 
218 
219                    </div> 
220 
221                </#if> 
222                 
223                <#-- Busca o link do curso --> 
224		 
225		<script> 
226	 
227		var isEmed = false;	 
228		var urlPage = window.location.href; 
229		var groupId = 20125; 
230		//var groupId = 20124; 
231 
232        var idCategoryByCodeUnit; 
233 
234		$(document).ready(function(){ 
235            // rotina para mostrar a tag do senac ao vivo 
236 
237			if(urlPage.indexOf('staging')> 1){ 
238			    groupId = 86888; 
239				//groupId = 419034; 
240
241			 
242			if(urlPage.indexOf('ensino-medio-tecnico')> 1){ 
243				isEmed = true; 
244
245			 
246			if(isEmed) 
247				buscaUrlCurso(0); 
248			else 
249				buscaUnidadeCategoryEUrlCurso(); 
250		 
251		 
252             
253			function  buscaUnidadeCategoryEUrlCurso(){ 
254                 
255                let map = new Map(); 
256 
257                if(idCategoryByCodeUnit != undefined) 
258                    map = new Map(JSON.parse(idCategoryByCodeUnit)); 
259 
260				var urlSearchCategories = '/o/senac-content-services/categoriaPorCodUnidade/{groupId}/{codUnidade}'; 
261				var urlSearch = urlSearchCategories.replace('\{groupId\}', groupId) 
262				.replace('\{codUnidade\}', $('#codUnidadeReferencia').text()); 
263	 
264				$.ajax({ 
265				url : urlSearch, 
266				async: false, 
267				method : 'get', 
268                beforeSend : function(xhr){ 
269                    if(idCategoryByCodeUnit != undefined && new Map(JSON.parse(idCategoryByCodeUnit)).get(urlSearch) != undefined){ 
270                        xhr.abort(); 
271                    }; 
272
273				}).done( 
274				function(data) { 
275	 
276				    if (data.toString().length > 0) { 
277 
278                        map.set(urlSearch, data); 
279                        idCategoryByCodeUnit = JSON.stringify([...map]); 
280					    		 
281
282	 
283                }); 
284 
285	            buscaUrlCurso(new Map(JSON.parse(idCategoryByCodeUnit)).get(urlSearch)); 
286				 
287			}; 
288 
289 
290            function buscaUrlCurso(unidadeCategory){ 
291				var urlSearchCursoUrl = '/o/senac-webcontent/webcontent/curso-url/{groupId}/{articleId}/{unidadeCategoryId}'; 
292				 
293				const url = urlSearchCursoUrl 
294		    	.replace('\{groupId\}', groupId) 
295		    	.replace('\{articleId\}', ${journalArticle.getArticleId()}) 
296		    	.replace('\{unidadeCategoryId\}',unidadeCategory); 
297		    	 
298		    	$.ajax({ 
299		    	    url :  url, 
300		    	    type : 'get' 
301		    	}) 
302		    	.done(function(res){ 
303		    		 
304		    		if(res.length > 0){ 
305						 
306		    			res = JSON.parse(res); 
307			    		 
308			    		$('#link_curso_${codigoFT}').attr('href', res.url); 
309		    		}		    					    		 
310		    		 
311		    	}); 
312			}; 
313 
314         
315        }); 
316	 
317		</script> 
318 
319            </div> 
320 
321        </#if> 
322	 
323	 
324		 
325 
326    </#list> 
327 
328</div> 

Próximas Turmas

Senac Online - ao vivo

Nossa infraestrutura

Publicador de Conteúdos e Mídias

Área de Convivência com mesas e cadeiras dispostas. Ao redor um jardim com gramado e arbustos baixos.
Área de Convivência

Área de convivência para atividades fora de sala de aula e descanso.

Laboratório Móvel com quatro bancadas posicionadas à direita. Em cima de cada bancada tem 2 notebooks para uso de alunos. À esquerda outras quatro bancadas com três notebooks em cima de cada uma. Em frente de cada notebook no chão estão posicionadas cadeiras com rodinhas e almofadadas.
Laboratório Móvel

O Laboratório Móvel possui infraestrutura para atender aulas de todas as modalidades e áreas de ensino utilizando notebooks. Com pontos de energia e internet em toda a sala permite que o aluno utilize o seu equipamento ou solicitado pelo professor em aula. Pode ser utilizado para aulas convencionais (sem notebooks) ou com os equipamentos.

Sala com computadores dispostos em mesas com cadeiras.
Laboratório de Informática

Ambiente desenvolvido para proporcionar ao aluno experimentação em atividades que envolvam o uso de computadores.

Laboratório com computadores sobre uma bancada, com cadeiras altas para uso dos alunos. Computadores dispostos para aulas de hardware
Laboratório de Hardware

Ambiente desenvolvido para proporcionar ao aluno experimentação nas aulas de hardware, com equipamentos necessários para o aprendizado.

No canto esquerdo uma mesa redonda pequena com um livro aberto em cima. Ao centro os pufes de descanso estão posicionados formando um círculo. À esquerda estão as prateleiras com o acervo de livros da Biblioteca. Ao fundo uma grande bancada com dez computadores sendo dois deles da Apple.
Biblioteca

A biblioteca do Senac Araraquara possui uma estrutura de fácil acesso para o público geral e para portadores de necessidades especiais, e conta com espaço para leitura e estudo em grupo e computadores conectados a internet, além de rede WIFI (internet sem fio), facilitando o processo do conhecimento e aprendizagem. Seu acervo é composto por mais de 3.000 itens, entre livros, dicionários, apostilas, periódicos, jornais, softwares, CDs Rom, DVDs, áudio-livro e livros em Braille. Os usuários contam ainda com um serviço de empréstimo que engloba todas as unidades da rede Senac São Paulo, permitindo maior acesso ao conhecimento. A biblioteca está à disposição dos usuários de segunda a sábado, para orientação e pesquisa, visando sempre ao crescimento integral dos usuários.

Ateliê de Design possui à esquerda sete mesas-pranchetas de desenho. À esquerda são outras seis mesas-pranchetas para desenho. Ao fundo três cadeiras estão posicionadas em uma mesa convencional em frente à lousa digital. No canto à direita está a porta de entrada e três computadores que podem ser utilizados para pesquisas em aula.
Ateliê de Design

O Ateliê de Design possui estrutura para atender aulas de Design de Interiores e desenhos, pois está equipado com mesas-pranchetas, e réguas paralelas. Além disso, conta com três computadores em sala para auxiliar os alunos em pesquisas durante as aulas.

Poltronas enfileiradas formando 15 filas. Ao fundo um palco com púlpito à direita ao centro mesa com seis cadeiras, à esquerda bandeiras da Fercomercio, Estado de São Paulo, Brasil Araraquara e Senac hasteadas.
Auditório

Ambiente climatizado, com capacidade para atender a um público de 142 pessoas, o auditório do Senac Araraquara foi projetado dentro das normas de acessibilidade, é equipado com tela de projeção, data show, ponto de internet e sistema acústico onde são realizadas conferências, teleconferências, palestras, apresentações de projetos, reuniões informativas, e de atividades culturais

No laboratório de moda possui à direita uma bancada com oito máquinas de costuras posicionadas frente a frente. Em cima da bancada tem também tesouras, carreteis de linhas e revistas de moda. Ao fundo manequins exibem roupas produzidas pelos alunos. O primeiro está no canto à esquerda com um vestido curto em cetim rosa, ao lado, um vestido curto verde militar e por último um vestido preto com cortes assimétricos.
Laboratório de Moda

O laboratório de moda permite o desenvolvimento de aulas teóricas e práticas da área de modelagem com mesas, cadeiras, máquinas de costura, provadores, manequins e diversos equipamentos apropriados para a criação e desenvolvimento das atividades propostas pelos cursos técnicos e livres da área de moda.

Três macas estão posicionadas lado a lado com equipamentos de iluminação e procedimentos estéticos e podológicos localizados entre cada uma delas. Ao fundo à direita dois armários para armazenagem de materiais utilizados em aula e em cima de um dele um boneco que reproduz o sistema linfático, também utilizado em aula.
Laboratório de Bem-estar

São dois laboratórios que permitem o atendimento de práticas ligadas à estética, à massoterapia e à podologia. Completo e moderno, com macas automáticas em cabines privativas, o espaço dispõe de vários equipamentos que colaboram para o aprendizado dos alunos.

Conheça a Unidade através do nosso Tour 360º

Tour 360º

Explore Senac

Publicador de Conteúdos e Mídias

#ConectaSenac

Publicador de Conteúdos e Mídias

Fale com a gente
pelo Whatsapp